/**
@author		Jong Min, Lee
@date		  01/23/2014
@breif		Tool box data class 

copyright(c) Tae Young Soft. All right reserved. 2014
*/
#include "stdafx.h"
#include "Taurus_ToolData/ToolboxData.h"

#include <algorithm>

CToolboxData::CToolboxData()
{}

CToolboxData::~CToolboxData()
{
  removeAllToolData();
}

DWORD CToolboxData::setName(const TCHAR* pszName)
{
  if(pszName == NULL)
    return ERROR_INVALID_PARAMETER;

  try
  {
    m_strName = pszName;
  }
  catch(CMemoryException* e)
  {
    e->Delete();
    return ERROR_NOT_ENOUGH_MEMORY;
  }

  return ERROR_SUCCESS;
}

DWORD CToolboxData::addToolData(const CToolData* pTool)
{
  if(pTool == NULL)
    return ERROR_INVALID_PARAMETER;

  auto posSame =
    find_if(m_listTools.begin(), m_listTools.end(),
    [&pTool](const CToolData* pToolData)
  {
    return (pTool->uID == pToolData->uID);
  });

  BOOL bFind = (posSame != m_listTools.end());
  if(bFind)
    return ERROR_SUCCESS;

  _TRY_BEGIN
  m_listTools.push_back(pTool);
  _CATCH_ALL
  return ERROR_NOT_ENOUGH_MEMORY;
  _CATCH_END

  return ERROR_SUCCESS;
}

DWORD CToolboxData::insertToolData(const unsigned nIndex, 
                                   const CToolData* pToolData)
{
  unsigned nNumToolData = m_listTools.size();
  if(nIndex >= nNumToolData || pToolData == NULL)
    return ERROR_INVALID_PARAMETER;

  auto same = 
    find_if(m_listTools.begin(), m_listTools.end(),
    [&pToolData](const CToolData* inToolData)
  {
    return (inToolData->uID == pToolData->uID);
  });

  BOOL bFind = (same != m_listTools.end());
  if(bFind)
    return ERROR_SUCCESS;

  _TRY_BEGIN
  m_listTools.push_back(pToolData);
  _CATCH_ALL
  return ERROR_NOT_ENOUGH_MEMORY;
  _CATCH_END

  return ERROR_SUCCESS;
}

DWORD CToolboxData::removeToolData(const unsigned nIndex)
{
  if(nIndex >= m_listTools.size())
    return ERROR_INVALID_PARAMETER;

  auto pos = m_listTools.begin();
  std::advance(pos, nIndex);
  m_listTools.erase(pos);
  return ERROR_SUCCESS;
}

DWORD CToolboxData::removeToolData(const CToolData* pToolData)
{
  auto res = find(m_listTools.begin(), m_listTools.end(), pToolData);
  if(res == m_listTools.end())
    return ERROR_INVALID_PARAMETER;

  m_listTools.erase(res);
  return ERROR_SUCCESS;
}

void CToolboxData::removeAllToolData()
{
  m_listTools.clear();
}